Flutter Boost3.0初探
背景
使命
推动Flutter官方开放更多的底层接口
FlutterBoost的升级
FlutterBoost的问题
稳定性,每次Flutter发布一个stable版本,开发者会来问我,FlutterBoost针对新版本适配了没有?他们准备升级新版本,需要FlutterBoost能适配最新版本。而我每次都要针对新版本拉2个新分支(Androidx 和Support分支),进行适配。时间长了,会产生很多分支,这个给分支管理带来很大的成本,比如在某个分支上修复的issue要同步到其他分支,一不小心就会遗漏同步。
社区的issue没有收敛的趋势。
设计过于复杂,概念太多。这让一个新手看FlutterBoost的代码很吃力。
FlutterBoost3.0做了什么
不侵入引擎,兼容Flutter的各种版本,Flutter sdk的升级不需要再升级FlutterBoost,极大降低升级成本。 不区分Androidx和Support分支。
简化架构和接口,和FlutterBoost2.0比,代码减少了一半。
双端统一,包括接口和设计上的统一。
支持打开Flutter页面,不再打开容器场景。
页面生命周期变化通知更方便业务使用。
解决了2.0中的遗留问题,例如,Fragment接入困难、页面关闭后不能传递数据、dispose不执行,内存占用过高等。
架构图
不入侵引擎
不区分Androidx和Support分支
双端设计统一,接口统一
支持 “打开flutter页面不再打开容器” 场景
InkWell(
child: Container(
color: Colors.yellow,
child: Text(
'打开外部路由',
style: TextStyle(fontSize: 22.0, color: Colors.black),
)),
onTap: () => BoostNavigator.of().push("flutterPage",
arguments: <String, String>{'from': widget.uniqueId}),
),
InkWell(
child: Container(
color: Colors.yellow,
child: Text(
'打开内部路由',
style: TextStyle(fontSize: 22.0, color: Colors.black),
)),
onTap: () => BoostNavigator.of().push("flutterPage",
withContainer: true,
arguments: <String, String>{'from': widget.uniqueId}),
)
生命周期的精准通知
Top Issue 解决
页面关闭后参数的传递,之前只有iOS支持,android不支持,目前在dart侧实现,Ios 和Android 都支持
解决了Android 状态栏字体和颜色问题。
解决了页面回退willpopscope不起作用问题。
解决了不在栈顶的页面也收到生命周期回调的问题
解决了多次setState耗性能问题。
提供了Framgent 多种接入方式的Demo,方便tab 场景的接入。
生命周期的回调代码,可以用户代码里面with的方式接入,使用更简单。
全面简化了,接入成本,包括 dart侧,android侧和ios
丰富了demo,包含了基本场景,方便用户接入 和测试回归。
FlutterBoost3.0 接入和使用
接入方式
flutter_boost:
git:
url: 'https://github.com/alibaba/flutter_boost.git'
ref: 'v3.0-beta.3'
目前FlutterBoost3.0 发布了beta版本,目前属于公测阶段。
接口文档
对Flutter2.0 新特性 FlutterEngineGroup
FlutterBoost的未来发展
FlutterBoost3.0会继续在单Engine方向完善和优化,让他更稳定,支持更多场景。
持续和Flutter 官方沟通,包括能否支持FlutterEngineGroup在isolate层面的内存共享。
探索Flutter2.0 多engine方案下新的混合栈。
References
[1]
Multiple Flutters: https://docs.google.com/document/d/1fdKRufqUzQvERcqNIUSq-GdabXc4k8VIsClzRElJ6KY/edit